package com.hhxy.array;
/*
    对输入的10个数字进行随机排序
    方法1：标记法，边输入边排序
    方法2：交换法，输入换成后排序
*/

import java.util.Random;
import java.util.Scanner;

public class RandomSort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        int[][] arr = new int[10][2];//用来存放排序好的数
        int index = 0;//随机编的索引号


        /*方法1：边输入边排序*/
/*        int number;//输入的数
        for (int i = 0; i <10; i++) {//arr[10].length获取列的长度：2
            System.out.println("请输入第" + (i + 1) + "个数");
            number = sc.nextInt();
            index = r.nextInt(arr.length);//随机编号0~4
            arr = f1(arr,number,index);
        }*/


        /*方法2：输入完成后进行排序*/
        for (int i=0;i<arr.length;i++) {
            System.out.println("请输入第" + (i + 1) + "个数");
            arr[i][0] = sc.nextInt();
        }
        arr = f2(arr,index);


        //遍历输出排序后的数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i][0]);
        }
    }

    /*方法1：标记法*/
    public static int[][] f1(int arr[][], int number, int index) {
        Random r = new Random();
        if (arr[index][1] == 0) {//如果未标记就直接进行赋值
            arr[index][0] = number;
            arr[index][1] = 1;//对已经排序的进行标记
        } else {
            while (arr[index][1] == 1) {//如果已经标记过了，就重新随机生成，直到未标记为止
                index = r.nextInt(arr.length);
                if (arr[index][1] == 0) {
                    arr[index][0] = number;
                    arr[index][1] = 1;//对已经排序的进行标记
                    break;//标记完成立马结束循环
                }
            }
        }
        return arr;
    }

    /*方法2：交换法*/
    public static int[][] f2(int arr[][],int index){
        Random r = new Random();
        int t;//用于交换的中间变量
        for (int i = 0; i <arr.length ; i++) {
            index = r.nextInt(arr.length);//随机生成一个0~4之间的数，用于交换
            t = arr[i][0];
            arr[i][0] = arr[index][0];
            arr[index][0] = t;
        }
        return arr;
    }
}
